package com.zzh.lib.core.utils;


import android.text.TextUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * Created by ZZH on 2022/7/19.
 *
 * @Date: 2022/7/19
 * @Email: zzh_hz@126.com
 * @QQ: 1299234582
 * @Author: zzh
 * @Description: 将JSON转换成HashMap。如果是复杂类型则是嵌套HashMap。
 * 例如
 * HashMap<String, HashMap<String, String>>
 * 1、如果是HashMap简单类型，HashMap<String, String>
 */
public class HJsonUtils {

    public static Map json2Map(String json) {
        try {
            return json2Map(new JSONObject(json));
        } catch (JSONException e) {
            return new HashMap();
        }
    }

    public static Map json2Map(JSONObject json) throws JSONException {
        Map retMap = new HashMap();
        if (json != JSONObject.NULL) {
            retMap = toMap(json);
        }
        return retMap;

    }

    public static Map toMap(JSONObject object) throws JSONException {
        Map map = new HashMap();
        Iterator keysItr = object.keys();
        while (keysItr.hasNext()) {
            String key = (String) keysItr.next();
            Object value = object.get(key);
            if (value instanceof JSONArray) {
                value = toList((JSONArray) value);
            } else if (value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            map.put(key, value);
        }
        return map;

    }

    public static List toList(JSONArray array) throws JSONException {

        List list = new ArrayList();
        for (int i = 0; i < array.length(); i++) {
            Object value = array.get(i);
            if (value instanceof JSONArray) {
                value = toList((JSONArray) value);
            } else if (value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            list.add(value);
        }
        return list;
    }

    /**
     * 简单判断字符串是否是json，不一定是真。
     *
     * @param json 字符串
     * @return true / false
     */
    public static boolean isSimpleJson(String json) {
        if (TextUtils.isEmpty(json)) {
            return false;
        }
        String jsonTmp = json.trim();
        if ((jsonTmp.startsWith("{") && jsonTmp.endsWith("}")) || (jsonTmp.startsWith("[") && jsonTmp.endsWith("]"))) {
            return true;
        }
        return false;
    }
}
